package co.edu.javeriana.konigsberg.xavier.servicio;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.ejb.Stateless;

import co.edu.javeriana.konigsberg.xavier.dao.desc.DepartamentoFacultadDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dao.desc.ProgramaDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dao.desc.ProgramaDepartamentoFacultadDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dto.DepartamentoFacultadDTO;
import co.edu.javeriana.konigsberg.xavier.entidad.Programa;
import co.edu.javeriana.konigsberg.xavier.entidad.ProgramaDepartamentoFacultad;

@Stateless
public class ProgramaDepartamentoFacultadServicio implements ProgramaDepartamentoFacultadServicioLocal, ProgramaDepartamentoFacultadServicioRemote {

	@EJB
	private ProgramaDepartamentoFacultadDAOLocal programaDepartamentoFacultadDAOLocal;
	
	@EJB
	private ProgramaDAOLocal programaDAOLocal;
	
	@EJB
	private DepartamentoFacultadDAOLocal departamentoFacultadDAOLocal;
	
	@EJB
	private DepartamentoFacultadServicioLocal departamentoFacultadServicioLocal;
	
	@EJB
	private FacultadServicioLocal facultadServicioLocal;
	
	@Override
	public void guardarProgramaDepartamentoFacultad(BigInteger idPrograma, List departamentosFacultadDTO) {
		List<ProgramaDepartamentoFacultad> departamentoFacultads = new ArrayList<ProgramaDepartamentoFacultad>();
		Programa programa = programaDAOLocal.obtenerPorId(idPrograma);
		for (int i = 0; i < departamentosFacultadDTO.size(); i++) {
			//String nombre = (String)departamentosFacultadDTO.get(i);
			ProgramaDepartamentoFacultad programaDepartamentoFacultad = new ProgramaDepartamentoFacultad();
			programaDepartamentoFacultad.setPrograma(programa);
			DepartamentoFacultadDTO departamentoFacultadDTO = (DepartamentoFacultadDTO) departamentosFacultadDTO.get(i);
			programaDepartamentoFacultad.setDepartamentoFacultad(departamentoFacultadDAOLocal.obtenerPorId(departamentoFacultadDTO.getIdDepartamentoFacultad()));
			departamentoFacultads.add(programaDepartamentoFacultad);
		}
		programaDepartamentoFacultadDAOLocal.guardar(departamentoFacultads);
	}

	@Override
	public List<DepartamentoFacultadDTO> obtenerLista(BigInteger idPrograma) {
		List<ProgramaDepartamentoFacultad> programaDepartamentoFacultads = programaDepartamentoFacultadDAOLocal.obtenerListaPorPrograma(idPrograma);
		List<DepartamentoFacultadDTO> departamentoFacultadDTOs = new ArrayList<DepartamentoFacultadDTO>();
		
		for (ProgramaDepartamentoFacultad programaDepartamentoFacultad : programaDepartamentoFacultads) {
			DepartamentoFacultadDTO departamentoFacultadDTO = new DepartamentoFacultadDTO();
			departamentoFacultadDTO.setIdDepartamentoFacultad(programaDepartamentoFacultad.getDepartamentoFacultad().getIdDepartamentoFacultad());
			departamentoFacultadDTO.setNombreDepartamentoFacultad(programaDepartamentoFacultad.getDepartamentoFacultad().getNombreDepartamentoFacultad());
			departamentoFacultadDTO.setFacultadDTO(facultadServicioLocal.getDTO(programaDepartamentoFacultad.getDepartamentoFacultad().getFacultad(), null));
			departamentoFacultadDTOs.add(departamentoFacultadDTO);
		}
		return departamentoFacultadDTOs;
	}

	@Override
	public void eliminarProgramaDepartamentoFacultad(BigInteger idPrograma) {
		programaDepartamentoFacultadDAOLocal.eliminarProgramaDepartamentoFacultad(idPrograma);
		
	}	
}
